Google Play服务将最低支持API级别14
来源:Google Android 开发者博客
发布人:Google 开发顾问 Doug Stevenson
Google Play 服务客户端内容库及 Firebase for Android 客户端内容库的 10.0.0 版本将是支持 Android API 级别 9(Android 2.3,Gingerbread)的最后版本。这些内容库的下一计划版本是 10.2.0,该版本会将支持的最低 API 级别从 9 提升至 14(Android 4.0.1,Ice Cream Sandwich)。此变更将于 2017 年初实施。
Google Play 服务为什么终止为 Gingerbread 和 Honeycomb 提供支持?
Gingerbread 平台大约有六年历史了。很多 Android 开发者都已停止在自己的应用中为 Gingerbread 提供支持。这有助于他们利用 Android 平台新功能构建更出色的应用。对于我们,情况也是如此。通过进行这一变更,我们将能够以更快的速度为 Android 开发者提供更稳健的工具集。
对于使用 Google Play 服务或 Firebase 的 Android 应用而言,这意味着:
您可以如当前一样使用版本 10.0.0 的 Google Play 服务和 Firebase。它将如过去一样继续适用于 Gingerbread 设备。
当您选择升级到未来版本 10.2.0 时,如果您的应用最低支持 API 级别 14 或更高版本(通常在 build.gradle 中指定为“minSdkVersion”),那么您不会遇到任何版本控制问题。不过,如果您的应用支持低于 API 级别 14 的版本,那么您在构建应用时会遇到如下问题以及错误:
很遗憾,所述建议不能帮助您在较旧版本的设备上成功运行您的应用。为了使用 10.2.0 及更高版本的 Google Play 服务,您可以从下面选择一个选项:
1. 将 API 级别 14 指定为支持的最低 API 级别。
我们建议您采用此方法。要终止为不再接收 Google Play 服务更新的 API 级别提供支持,则只需在应用的 build.gradle 中将 minSdkVersion 值至少提升至 14。如果您以此方式更新应用并将其发布到 Play 商店,则 API 级别低于该支持级别的设备的用户将无法查看或下载您的更新。不过,他们仍可以下载并使用最近针对他们设备发布的应用版本。
实际上,只有很小一部分 Android 设备所用的 API 级别低于 14。您可以阅读更多有关当前 Android 设备分布情况的内容:
developer.android.google.cn/about/dashboards
我们相信,这些旧版本设备中很多使用并不活跃。
如果您的应用仍有非常多的用户使用较旧版本的设备,那么您可以在 Google Play 中提供多 APK 支持,以交付使用 Google Play 服务 10.0.0 的 APK。您可以参考选项 “2” 中的具体操作步骤
2. 构建多个 APK,以支持 API 级别低于 14 的设备。
除了一些配置和代码管理外,您还可以构建多个 APK,为不同的最低 API 级别及不同版本的 Google Play 服务提供支持。您可以利用 Gradle 中的构建变体来实现这一点。首先,为旧版本以及较新版本的应用定义构建风味。例如,在 build.gradle 中用定义构建不同的风味 “Flavor” ,为所用的 Play 服务组件定义两种不同的编译依赖项:
productFlavors { legacy { minSdkVersion 9 versionCode 901 // Min API level 9, v01 } current { minSdkVersion 14 versionCode 1401 // Min API level 14, v01 } } dependencies { legacyCompile 'com.google.android.gms:play-services:10.0.0' currentCompile 'com.google.android.gms:play-services:10.2.0' }
在上述情形中,会存在针对两种不同版本的 Google Play 服务客户端内容库而构建的产品风味。这非常适合于仅调用在 10.0.0 内容库中可用的 API 的情况。如果您需要调用在 10.2.0 中提供的较新 API,那么您就必须为较新 API 调用创建一个兼容性内容库,使这些 API 仅内置到可以使用它们的应用版本中:
声明一个 Java 接口,公开您要执行的当前版本 Play 服务中可用的更高级别的功能。
构建两个实现此接口的 Android 内容库。“最新”实现应根据需要调用较新的 API。“旧”实现应根据需要执行较旧版本 Play 服务中的功能,或者不执行任何操作。两个内容库都应添加此接口。
使用“legacyCompile”和“currentCompile”依赖项有条件地将每个内容库编译到应用中。
在应用的代码中,无论何时需要较新的 Play API,均通过兼容性内容库调用。
为每个风味构建一个发布版 APK,然后将两个 APK 都发布到 Play 商店中,这样设备就可使用最适合自己的版本进行更新。您还可以通过点击 “阅读原文” 了解更多有关在 Play 商店中提供多 APK 支持的内容。